#include "../Server/RpcServer.hpp"
#include <memory>
/*
提供RPc服务的主机使用的服务端代码

*/
// 实际的业务处理函数
void Add(const Json::Value &params, Json::Value &result)
{
    DLOG("进入Add函数处理业务");
    int num1 = params["nums1"].asInt();
    int num2 = params["nums2"].asInt();
    result["Res"] = num1 + num2;
}

void Div(const Json::Value &params, Json::Value &result)
{
    DLOG("进入Div函数处理业务");
    int num1 = params["nums1"].asInt();
    int num2 = params["nums2"].asInt();
    result["Res"] = num1 / num2;
}
int main()
{
    // 添加一个服务描述对象及注册实际的业务处理函数
    //启用了服务注册功能，先向服务中心发起服务注册请求阻塞等待回应
    //再开始循环监听客户端连接到来和客户端fd就绪事件即RPc请求的到来
    Server::RpcServer Server({"127.0.0.0", 7071},true,{"127.0.0.0", 9090});
    std::unique_ptr<RpcRouter::ServerDescBuild> SDbuild = std::make_unique<RpcRouter::ServerDescBuild>();
    SDbuild->SetMethodName("Add");
    SDbuild->SetParamsDesc({"nums1", RpcRouter::PraType::INT});
    SDbuild->SetParamsDesc({"nums2", RpcRouter::PraType::INT});
    SDbuild->SetCallBack(Add);
    SDbuild->SetReturnType(RpcRouter::PraType::INT);
    Server.RegisterMethod(SDbuild->bulid()); // 注册服务描述对象

    SDbuild->SetMethodName("Div");
    SDbuild->SetParamsDesc({"nums1", RpcRouter::PraType::INT});
    SDbuild->SetParamsDesc({"nums2", RpcRouter::PraType::INT});
    SDbuild->SetCallBack(Div);
    SDbuild->SetReturnType(RpcRouter::PraType::INT);
    Server.RegisterMethod(SDbuild->bulid()); // 注册服务描述对象
    // 启动服务器开始死循环监听
    Server.Start();
}